const Koa = require('koa');

const bodyParser = require('koa-bodyparser');

const controller = require('./controller');

const templating = require('./templating');

const app = new Koa();

const isProduction = (process.env.NODE_ENV === 'production');  //判断当前环境是否是production环境。如果是，为true就使用缓存，如果不是，为false，就关闭缓存
/**
 * 在开发环境下，关闭缓存后，我们修改View，可以直接刷新浏览器看到效果，
 * 否则，每次修改都必须重启Node程序，会极大地降低开发效率。
 * 开发时环境变量应该设置为'development'，
 * 而部署到服务器时，环境变量应该设置为'production'
 */
// log request URL:
app.use(async (ctx, next) => 
{
    console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
    var start = new Date().getTime();
    var execTime;
    await next();
    execTime = new Date().getTime() - start;
    ctx.response.set('X-Response-Time', `${execTime}ms`);
});

// static file support:
if (! isProduction) //不是productioin环境，表示是开发环境,必须重新加载js,css,fonts文件，不然页面不会刷新
{
    let staticFiles = require('./static-files');
    app.use(staticFiles('/static/', __dirname + '/static'));
}

// parse request body:
app.use(bodyParser());

// add nunjucks as view:
app.use(templating('views', 
{
    noCache: !isProduction,
    watch: !isProduction
}));

// add controller:
app.use(controller());

app.listen(3000);
console.log('app started at port 3000...');